#include <iostream>
#include <string>
using namespace std;

int main()
{
    int *p1 = (int*)malloc(sizeof(int)); // malloc创建空间，并强制转化给它一个类型
    if(p1==nullptr) // 判断空间是否分配成功
    {
        return -1;
    }
    *p1 = 20;
    free(p1); //释放指针

    int *p2 = new int(20);
    delete p2;

    int *p3 = (int *)malloc(sizeof(int) * 10); // 创建长度为10的数组，返回的是数组空间的首地址
    if(p3==nullptr)
    {
        return -1;
    }
    free(p3);

    int *p4 = new int[10](); // 创建长度为10的数组，返回的是数组空间的首地址
    delete[] p4;

    return 0;
}

/*
int main()
{
    // 4种new初始化
    int *p1 = new int(20); // 最正常的
    int *p2 = new (nothrow) int(20); // 不会抛出异常的
    const int *p3 = new const int(20); // 常量指针类型

    int a = 0;
    int *p4 = new (&a) int(50); // 定位new，将原来变量a的地址中的值改为当前初始化的值，p4的地址和a的地址一致

    // 0x632410 0x632450 0x632490 0x61fdfc 50 0x61fdfc
    cout << p1 << " " << p2 << " " << p3 << " " << p4 << " " << a << " " << &a << endl;
    return 0;
}
*/